package br.com.serctam.session;

import java.util.Date;
import java.util.List;

import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.web.RequestParameter;
import org.jboss.seam.international.StatusMessages;
import org.jboss.seam.log.Log;
import org.jboss.seam.persistence.HibernateSessionProxy;

import br.com.serctam.entity.Candidato;

@Stateful
@Name("AcompanhamentoInscricao")
@Scope(ScopeType.CONVERSATION)
public class AcompanhamentoInscricaoBean implements AcompanhamentoInscricao
{
    @Logger private Log log;

    @In StatusMessages statusMessages;
    
    @PersistenceContext
    private EntityManager entityManager;
    
    @RequestParameter
    private Long idCandidato;

    @In
    private HibernateSessionProxy hibernateSession;
    
    private String cpf;
    private Date dataNascimento;

    @DataModel
    private List<Candidato> candidatos;

    @Out(scope=ScopeType.CONVERSATION , required=false)
    private Candidato candidato;

    //@Begin
    @Factory("candidatos")
    public void acompanhamentoInscricao()
    {
    	candidato = null;
    	if (candidatos != null) {
    		candidatos.clear();
    	} 
        // implement your business logic here
        log.info("AcompanhamentoInscricao.acompanhamentoInscricao() action called with: #{AcompanhamentoInscricao.cpf}");

		Criteria crt =  hibernateSession.createCriteria(Candidato.class);
		
		if( cpf != null && !cpf.equals("")){
			crt.add(Restrictions.eq("cpf", cpf));
		}
		
		if (dataNascimento != null) {
			crt.add(Restrictions.eq("dataNascimento", dataNascimento));
		}
		
		
		if (cpf != null && !cpf.equals("") && dataNascimento != null) {
			candidatos = crt.list();
		}
		
		if(candidatos != null && candidatos.size() == 1 ){
			candidato = candidatos.get(0);
		} else {
			candidato =  null;
		}
		
    }
    
//    public void select(){
//    	log.info("Selecionado, Candidato: #{candidato.nome} - #{candidato.cpf}");
//    }
    
    //@End(beforeRedirect=false)
    public void select(){
    	//candidato = (Candidato)hibernateSession.load(Candidato.class, idCandidato);
    	
    	log.info("idCandidato: " + idCandidato);
    	candidato = (Candidato)entityManager.find(Candidato.class, idCandidato);
    	log.info("Selecionado, Candidato: "+ candidato.getNome() + "  -  " + candidato.getCpf());
    	
    	
    }
    
    private void sendMail() {
    	
    	String fromAdr = "nao-responda";
    	String toAdr = "celioabreu@gmail.com";
    	String subject = "Teste";
    	String msg = "Body";
    	log.info("Teste de MAil $$$$$$$");
    try {  
            Context initCtx = new InitialContext();  
            Session session = (Session) initCtx.lookup("java:/Mail");  

            Message message = new MimeMessage(session);  
            message.setFrom(new InternetAddress(fromAdr));  
            InternetAddress to[] = new InternetAddress[1];  
            to[0] = new InternetAddress(toAdr);  
            message.setRecipients(Message.RecipientType.TO, to);  
            message.setSubject(subject);  
            message.setContent(msg, "text/plain");  
            Transport.send(message);  
    } catch (Exception e) {  
            e.printStackTrace();  
    }
	log.info("FIMmmmmmmmmm Teste de MAil $$$$$$$");

}  

    @Destroy
    @Remove
    public void destroy() {}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public Candidato getCandidato() {
		return candidato;
	}

	public void setCandidato(Candidato candidato) {
		this.candidato = candidato;
	}

	public List<Candidato> getCandidatos() {
		return candidatos;
	}

	public void setCandidatos(List<Candidato> candidatos) {
		this.candidatos = candidatos;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

}
